// poj1635
// 题意：给定两个同根的树，判断是不是同构
//
// 题解：由于根确定相同，有根树同构简单些。用树的最小表示法。遍历序列
//       中求出某个根节点的每个便利序列片段，然后递归求得最小表示，然
//       后加上前后括号（该根节点深入该子树的步骤以及返回根节点的步骤
//       ），然后将该节点的所有子树的括号序列按字典序排序，相加就是该
//       子树的括号序列最小表示。
//       最后比较两个最小表示是否想等即可知道是否同构。
//
// run: $exec < input
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

std::string s1, s2;

std::string min_rep(std::string const & s)
{
	int n = s.size(), tot = 0;
	std::string tmp;
	std::vector<std::string> v;
	bool first = true;
	for (int i = 0; i < n; i++) {
		if (s[i] == '0') tot++;
		else tot--;
		if (!first && tot != 0) tmp += s[i];
		if (tot == 1) first = false;
		if (!tot) {
			v.push_back('0' + min_rep(tmp) + '1');
			tmp = "";
			first = true;
		}
	}
	std::sort(v.begin(), v.end());
	tmp = "";
	for (int i = 0; i < (int)v.size(); i++)
		tmp += v[i];
	return tmp;
}

int main()
{
	std::ios::sync_with_stdio(false);
	int T; std::cin >> T;
	while (T--) {
		std::cin >> s1 >> s2;
		if (min_rep(s1) == min_rep(s2))
			std::cout << "same\n";
		else
			std::cout << "different\n";
	}
}

